#ifndef _PIGOS_ELF_H_
#define _PIGOS_ELF_H_

#include "type.h"

#define EI_NIDENT 16
typedef struct{
	u8_t	e_ident[EI_NIDENT];
	u16_t	e_type;
	u16_t	e_machine;
	u32_t	e_version;
	u32_t	e_entry;
	u32_t	e_phoff;
	u32_t	e_shoff;
	u32_t	e_flags;
	u16_t	e_ehsize;
	u16_t	e_phentsize;
	u16_t	e_phnum;
	u16_t	e_shentsize;
	u16_t	e_shnum;
	u16_t	e_shstrndx;
} Elf32_Ehdr;

typedef struct {
	u32_t	p_type;
	u32_t	p_offset;
	u32_t	p_vaddr;
	u32_t	p_paddr;
	u32_t	p_filesz;
	u32_t	p_memsz;
	u32_t	p_flags;
	u32_t	p_align;
} Elf32_phdr;

#define PT_LOAD		1

int load_elf(const char *path, u32_t *begin_addr);

#endif /* _PIGOS_ELF_H_ */
